package com.gugee.ins.common.dal.service.blogger;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gugee.ins.common.dto.InsBloggerFollowerDto;
import com.gugee.ins.common.model.ai.InComeResponse;
import com.gugee.ins.common.model.ai.InsBloggerCategory;
import com.gugee.ins.common.model.ai.InsBloggerLanguage;
import com.gugee.ins.common.model.mysql.blogger.InsBlogger;
import com.gugee.ins.common.model.spider.blogger.InsBloggerUserFromId;
import com.gugee.ins.data.common.msg.InsBloggerMessage;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * insBlogger dao
 * @author Huangxin
 */
public interface InsBloggerDao extends IService<InsBlogger> {
    long getMaxId();
    List<InsBloggerMessage> findInsBloggerMessageByPages(long startId, long endId);
    List<InsBloggerMessage> findInsBloggerMessageByPages(long startId, long endId,long followerCount,long lastCollectTime);
    List<InsBloggerMessage> findInsMBloggerFromInsBlogger(long startId, long endId,long followerCount);

    /**
     * 批量插入
     * @param insBloggerMessageList
     * @return
     */
    void batchInsert(List<InsBloggerMessage> insBloggerMessageList);

    /**
     * 判断是否需要采集
     * @param uid
     * @param needSearchDba 是否需要查询数据库
     * @return
     */
    boolean checkCollecting(long uid,boolean needSearchDba);

    /**
     * 根据uid查找数据
     * @param uid
     * @return
     */
    InsBlogger findByUid(long uid);

    /**
     * 查询存在的uid
     * @param uids
     * @return
     */
    List<InsBlogger> findExistUidByUids(List<Long> uids);

    List<Long> findExistUidByUidsWithCollectTime(@Param("uids") List<Long> uids, long collectTime);

    /**
     * 根据条件获取真实粉丝或僵尸粉丝列表
     * @return
     */
    List<InsBlogger> findByFollower(long uid, boolean isZombie);

    long countByFollower(long uid,boolean isZombie);

    /**
     * 根据 帖子 shortcode 查找标记用户及其账户类型
     * @param shortcode
     * @return
     */
    List<InsBloggerMessage> findInsBloggerByShortcode(String shortcode);

    int updateBlogger(InsBloggerUserFromId insBloggerUserFromId);

    /**
     * 根据uid条件更新
     * @param insBlogger 数据
     * @return
     */
    void updateByUidSelective(InsBlogger insBlogger);

    /**
     * 根据uid 更新年龄和性别
     * @param age
     * @param gender
     * @param birth
     * @param race
     * @param uid
     */
    void updateAiGenderAndAiAgeByUid(int age,int gender,int birth,String race,long uid);

    /**
     * 根据uid 更新国家
     * @param uid
     * @param nation
     * @param nationSource
     */
    void updateNation(long uid,String nation,int nationSource);

    /**
     * 根据uid 更新语言
     * @param uid
     * @param language
     */
    void updateLanguage(long uid,String language);

    /**
     * 批量更新 语言
     * @param insBloggerLanguages
     */
    void batchUpdateLanguage(List<InsBloggerLanguage> insBloggerLanguages);

    /**
     * 根据uids 更新 近30天粉丝增长数和粉丝增长率
     * @param uids
     */
    void updateLastFollowerGrowByUids(List<Long> uids);

    /**
     * 根据uid条件更新
     * @param insBlogger 数据
     * @return
     */
    void updateByUid(InsBlogger insBlogger);
    /**
     * 更新关注人列表采集时间
     * @param uid
     */
    void updateFollowingCollectTime(long uid);

    /**
     * 更新真实粉丝占比率
     * @param uid
     * @param realFollowerRate
     */
    void updateRealFollowerRate(long uid,double realFollowerRate);

    /**
     * 批量更新ai收入
     * @param inComeResponses
     */
    void batchUpdateIncome(List<InComeResponse> inComeResponses);

    /**
     * 批量更新ai分类
     * @param insBloggerCategories
     */
    void batchUpdateAiCategory(List<InsBloggerCategory> insBloggerCategories);

    /**
     * 更新状态
     * @param uid
     * @param status
     */
    void updateAccountStatus(long uid ,int status);

    /**
     * 根据uid获取粉丝数等信息
     * @param uids
     * @return
     */
    List<InsBloggerFollowerDto> findFollowerCountByUid(List<Long> uids);
}
